package Border;

import be.kuleuven.cs.som.annotate.Basic;
import be.kuleuven.cs.som.annotate.Raw;
import SquarePackage.Direction;
import SquarePackage.Square;

public abstract class NonEmptySpace extends Border {
	/**
	 * boolean keeping hold of the slipperyness of the material making this NonEmptySpace
	 */
	public boolean isSlippery;
	/**
	 * constructor for a nonEmptySpace
	 * @param square1 first square of the border
	 * @param square2 second square, possibly null
	 * @param direction direction of the border
	 * @param isSlippery slippery state of the border
	 */
	@Raw
	protected NonEmptySpace(Square square1, Square square2, Direction direction, boolean isSlippery) {
		super(square1,square2,direction);
		setSlippery(isSlippery);
		
	}
	/**
	 * setter for the slippery state
	 * @param isSlippery the new state specified
	 * @post isSlippery()=true;
	 */
	@Basic @Raw
	public void setSlippery(boolean isSlippery) {
		this.isSlippery = isSlippery;
	}
	/**
	 * getter for the slippery state
	 * @return
	 */
	@Basic @Raw
	public boolean isSlippery() {
		return isSlippery;
	}
	@Override
	public abstract Border getHighest(Border border);
	@Override
	public abstract boolean getIsolation();
    public abstract NonEmptySpace getCopy(Square square, Direction direction);
}
